|
ARD2
1.00 for Rev B. Hardware
Airbag Reference Demonstrator using MPC5604P
|
00001 00018 #ifndef _MMA68XX_H 00019 #define _MMA68XX_H 00020 00021 /* 00022 ************************************************************** 00023 * Defines, Macros and Typedefs 00024 **************************************************************/ 00025 /*** Constant Macros ***/ 00026 /* Default Yes and No defines */ 00027 #ifndef TRUE 00028 #define TRUE (1u) 00029 #endif 00030 #ifndef CLEAR 00031 #define CLEAR (0u) 00032 #endif 00033 #ifndef BITS_IN_NIBBLE 00034 #define BITS_IN_NIBBLE (4u) 00035 #endif 00036 #ifndef BITS_IN_BYTE 00037 #define BITS_IN_BYTE (8u) 00038 #endif 00039 #ifndef BYTES_IN_16 00040 #define BYTES_IN_16 (2u) 00041 #endif 00042 #ifndef BYTES_IN_32 00043 #define BYTES_IN_32 (4u) 00044 #endif 00045 #ifndef BIT_DEFINITION 00046 #define BIT_DEFINITION 00047 #define BIT0 (1u << 0u) 00048 #define BIT1 (1u << 1u) 00049 #define BIT2 (1u << 2u) 00050 #define BIT3 (1u << 3u) 00051 #define BIT4 (1u << 4u) 00052 #define BIT5 (1u << 5u) 00053 #define BIT6 (1u << 6u) 00054 #define BIT7 (1u << 7u) 00055 #define BIT8 (1u << 8u) 00056 #define BIT9 (1u << 9u) 00057 #define BIT10 (1u << 10) 00058 #define BIT11 (1u << 11) 00059 #define BIT12 (1u << 12) 00060 #define BIT13 (1u << 13) 00061 #define BIT14 (1u << 14) 00062 #define BIT15 (1u << 15) 00063 #define BIT16 (1u << 16) 00064 #define BIT17 (1u << 17) 00065 #define BIT18 (1u << 18) 00066 #define BIT19 (1u << 19) 00067 #define BIT20 (1u << 20) 00068 #define BIT21 (1u << 21) 00069 #define BIT22 (1u << 22) 00070 #define BIT23 (1u << 23) 00071 #define BIT24 (1u << 24) 00072 #define BIT25 (1u << 25) 00073 #define BIT26 (1u << 26) 00074 #define BIT27 (1u << 27) 00075 #define BIT28 (1u << 28) 00076 #define BIT29 (1u << 29) 00077 #define BIT30 (1u << 30) 00078 #define BIT31 (1u << 31) 00079 #endif 00080 00081 00082 /* Register Addresses for the device */ 00083 #define MMA6800_MEMORY_MAP_SIZE (0x18u) 00084 #define MMA6800_SN0 (0x00u << 8u) 00085 #define MMA6800_SN1 (0x01u << 8u) 00086 #define MMA6800_SN2 (0x02u << 8u) 00087 #define MMA6800_SN3 (0x03u << 8u) 00088 #define MMA6800_STDEFL_X (0x04u << 8u) 00089 #define MMA6800_STDEFL_Y (0x05u << 8u) 00090 #define MMA6800_FCTCFG_X (0x06u << 8u) 00091 #define MMA6800_FCTCFG_Y (0x07u << 8u) 00092 #define MMA6800_PN (0x08u << 8u) 00093 #define MMA6800_RESERVED3 (0x09u << 8u) 00094 #define MMA6800_DEVCTL (0x0Au << 8u) 00095 #define MMA6800_DEVCFG (0x0Bu << 8u) 00096 #define MMA6800_DEVCFG_X (0x0Cu << 8u) 00097 #define MMA6800_DEVCFG_Y (0x0Du << 8u) 00098 #define MMA6800_ARMCFGX (0x0Eu << 8u) 00099 #define MMA6800_ARMCFGY (0x0Fu << 8u) 00100 #define MMA6800_ARMT_XP (0x10u << 8u) 00101 #define MMA6800_ARMT_YP (0x11u << 8u) 00102 #define MMA6800_ARMT_XN (0x12u << 8u) 00103 #define MMA6800_ARMT_YN (0x13u << 8u) 00104 #define MMA6800_DEVSTAT (0x14u << 8u) 00105 #define MMA6800_COUNT (0x15u << 8u) 00106 #define MMA6800_OFF_CORR_X (0x16u << 8u) 00107 #define MMA6800_OFF_CORR_Y (0x17u << 8u) 00108 00109 #define MMA6800_PCM_ON (0x10u) 00110 #define MMA6800_ARM_MOVEAVGHIGH (0x20u) 00111 #define MMA6800_ARM_MOVEAVGLOW (0x21u) 00112 #define MMA6800_ARM_COUNTHIGH (0x30u) 00113 #define MMA6800_ARM_COUNTLOW (0x31u) 00114 #define MMA6800_ARM_UNFILTHIGH (0x40u) 00115 #define MMA6800_ARM_UNFILTTLOW (0x41u) 00116 00117 /* Register related */ 00118 #define MMA6800_READ_REGISTER (0x00u) 00119 #define MMA6800_WRITE_REGISTER (0x40u) 00120 00121 /* Accel reading function masks */ 00122 #define MMA6800_READ_X (BIT0) 00123 #define MMA6800_READ_Y (BIT1) 00124 00125 /* Accel reading settings */ 00126 #define MMA6800_READ_ACCEL (0x2000u) 00127 #define MMA6500_READ_ACCEL (0x2008u) 00128 #define MMA6800_X_AXIS (0x0000u) 00129 #define MMA6800_Y_AXIS (0x4000u) 00130 #define MMA6800_ARM_ENABLE (0x0002u) 00131 #define MMA6800_ARM_DISABLE (0x0000u) 00132 #define MMA6800_SIGNED_DATA (0x0000u) 00133 #define MMA6800_UNSIGNED_DATA (0x0004u) 00134 #define MMA6800_OFFSET_CANCELLED (0x0000u) 00135 #define MMA6800_RAW_DATA (0x1000u) 00136 00137 /* Transfer mode definitions for MMA6800 */ 00138 #define MMA6800_TRANSFER_MODE_IS_SCHEDULED (0u) 00139 #define MMA6800_TRANSFER_MODE_IS_IMMEDIATE (1u) 00140 00141 /* Error bits */ 00142 #define MMA6800_REGISTER_RESP_SIGNATURE (BIT11 | BIT10) 00143 #define MMA6800_ACCEL_READING (0x01u) 00144 #define MMA6800_REGISTER_RESPONSE (0x02u) 00145 #define MMA6800_TIMED_OUT (0x04u) 00146 #define MMA6800_INVALID_PARITY (0x08u) 00147 #define MMA6800_INVALID_MEMORY_LOCATION (0x10u) 00148 #define MMA6800_ERROR_DATAGRAM (0x20u) 00149 #define MMA6800_ERROR_ACCEL (0x40u) 00150 00151 /* Mesquite or Sycamore */ 00152 #define MESQUITE 1 00153 #define SYCAMORE 2 00154 00155 /* To filter out acceleration */ 00156 #define MMA6800_RAW_ACCEL_MASK (0x03FFu) 00157 #define MMA6500_RAW_ACCEL_MASK (0xC3FFu) 00158 00159 /* Global buffer size */ 00160 #define MMA6800_GLOBAL_BUFFER_SIZE (30u) 00161 00162 /* Error codes */ 00163 #define MMA6800_ERROR_MASK ((uint16_t)0x6000u) 00164 00165 #define MMA6800_MSG_BUFFER_SIZE 50 00166 00167 /* This define counts how many elements are needed for */ 00168 /* an accel response given the number of elements sent */ 00169 /* as a request */ 00170 #define RAW_MMA_ACCEL_ARRAY_SIZE 3u 00171 00172 /*** Function Macros ***/ 00173 #ifndef N_ELEMENTS 00174 #define N_ELEMENTS(X) (sizeof(X)/sizeof(*(X))) 00175 #endif 00176 00177 /*** Enums ***/ 00178 00179 /*** TypeDefs ***/ 00180 00181 /* 00182 ************************************************************** 00183 * Declarations 00184 **************************************************************/ 00185 /*** Extern ***/ 00186 extern const uint16_t cau16MMA6800ReadAllRegisters[]; 00187 extern const uint16_t cau16MMA6800Reset[]; 00188 extern const uint16_t cau16MMA6800PerformAccelReading[]; 00189 extern const uint16_t cau16MMA6500PerformAccelReading[]; 00190 extern uint8_t (* const u8pfnMMA6800BatchOp[])(const uint8_t cu8DSPIInstance, 00191 const uint8_t cu8ChipSelect, 00192 const uint16_t* pu16DataToSend, 00193 uint16_t* pu16UnfilteredDataReceived, 00194 uint8_t u8Size); 00195 /*** Globals ***/ 00196 extern uint8_t gau8MMA6800GlobalResult[MMA6800_GLOBAL_BUFFER_SIZE]; 00197 /*** Static Globals ***/ 00198 /* 00199 ************************************************************** 00200 * Function Prototypes 00201 **************************************************************/ 00202 /* 00203 ****************************************************************************** 00204 * 00205 * Function: u8fnMMA6800ReadRegister() 00206 * 00207 */ 00230 uint8_t u8fnMMA6800ReadRegister(const uint8_t cu8DSPIInstance, 00231 const uint8_t cu8ChipSelect, 00232 const uint8_t cu8TransferMode, 00233 uint16_t u16Register, 00234 uint16_t* pu16DataRead); 00235 /* 00236 ****************************************************************************** 00237 * 00238 * Function: u8fnMMA6800WriteRegister() 00239 * 00240 */ 00264 uint8_t u8fnMMA6800WriteRegister(const uint8_t cu8DSPIInstance, 00265 const uint8_t cu8ChipSelect, 00266 const uint8_t cu8TransferMode, 00267 uint16_t u16Register, 00268 uint8_t u8ValueToWrite, 00269 uint16_t* pu16DataRead); 00270 /* 00271 ****************************************************************************** 00272 * 00273 * Function: u8fnMMA6800Reset() 00274 * 00275 */ 00288 uint8_t u8fnMMA6800Reset(const uint8_t cu8DSPIInstance, 00289 const uint8_t cu8ChipSelect, 00290 const uint8_t cu8TransferMode); 00291 /* 00292 ****************************************************************************** 00293 * 00294 * Function: u8fnMMA6800ReadAccel() 00295 * 00296 */ 00326 uint8_t u8fnMMA6800ReadAccel(const uint8_t cu8DSPIInstance, 00327 const uint8_t cu8ChipSelect, 00328 const uint8_t cu8TransferMode, 00329 const uint8_t cu8Axis, 00330 const uint8_t cu8ConfigMemory, 00331 uint16_t* pu16AccelResults, 00332 const uint8_t cu8Accel); 00333 /* 00334 ****************************************************************************** 00335 * 00336 * Function: u8fnMMA6800ExtractRegisterResponse() 00337 * 00338 */ 00348 uint8_t u8fnMMA6800ExtractRegisterResponse(const uint16_t* pu16RawResponse, \ 00349 uint8_t* pu8Response, \ 00350 uint8_t u8Size); 00351 /* 00352 ****************************************************************************** 00353 * 00354 * Function: u8fnMMA6800ExtractAccelResponse() 00355 * 00356 */ 00368 uint8_t u8fnMMA6800ExtractAccelResponse(const uint16_t* pu16RawResponse, 00369 uint16_t* pu16Response, 00370 uint8_t u8Size, 00371 const uint8_t cu8Accel); 00372 /* 00373 ****************************************************************************** 00374 * 00375 * Function: u8fnMMA6800ResponseAnalysis() 00376 * 00377 */ 00388 static uint8_t u8fnMMA6800ResponseAnalysis(uint16_t u16RawResponse); 00389 /* 00390 ****************************************************************************** 00391 * 00392 * Function: u8fnMMA6800ErrorResponseAnalysis() 00393 * 00394 */ 00404 static uint8_t u8fnMMA6800ErrorResponseAnalysis(const uint16_t cu16ReceivedWord); 00405 /* 00406 ****************************************************************************** 00407 * 00408 * Function: u16fnMMA6800AddParityToCommand() 00409 * 00410 */ 00418 static uint16_t u16fnMMA6800AddParityToCommand(uint16_t u16RawCommand); 00419 /* 00420 ****************************************************************************** 00421 * 00422 * Function: u8fnMMA6800BatchOp() 00423 * 00424 */ 00440 uint8_t u8fnMMA6800BatchOp(const uint8_t cu8DSPIInstance, \ 00441 const uint8_t cu8ChipSelect, \ 00442 const uint16_t* pu16DataToSend, \ 00443 uint16_t* pu16UnfilteredDataReceived, \ 00444 uint8_t u8Size); 00445 /* 00446 ****************************************************************************** 00447 * 00448 * Function: u8fnMMA6800ScheduleBatchOp() 00449 * 00450 */ 00464 uint8_t u8fnMMA6800ScheduledBatchOp(const uint8_t cu8DSPIInstance, 00465 const uint8_t cu8ChipSelect, 00466 const uint16_t* pu16DataToSend, 00467 uint16_t* pu16UnfilteredDataReceived, uint8_t u8Size); 00468 00469 #endif /* _FILENAME_H */